package com.handydata.antifraud.ws.dap;

import com.alibaba.fastjson.JSONObject;
import com.handydata.antifraud.annotation.Comment;
import com.handydata.antifraud.common.constant.DataSourceCode;
import com.handydata.antifraud.common.exception.WsInvokeException;
import com.handydata.antifraud.to.dap.OwnerShipReqTO;
import com.handydata.antifraud.to.dap.OwnerShipResTO;
import com.handydata.antifraud.util.DateUtil;
import com.handydata.antifraud.ws.WsInvocationService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.util.Date;

/**
 * 手机号归属地查询
 * @author Lenovo-3
 *
 */
@Slf4j
@Comment("聚合手机号码手机归属地查询API")
@Service("ownerShipWsService")
public class OwnerShipWsServiceImpl extends DataPlatformWsService<OwnerShipReqTO, OwnerShipResTO>
		implements WsInvocationService<OwnerShipReqTO, OwnerShipResTO> {

	@Override
	public OwnerShipResTO query(OwnerShipReqTO req) throws WsInvokeException {
		log.info("聚合手机号码手机归属地查询API请求参数 {}", req);
		OwnerShipResTO resTO = new OwnerShipResTO();
		if (StringUtils.isEmpty(req.getPhoneNum())) {
			log.error("聚合手机号码手机归属地查询API参数校验 {}", "phone为空");
			resTO.setResCode("1111");
			resTO.setResMsg("聚合手机号码手机归属地查询API接口phone参数为空");
			return resTO;
		}
		this.dataType = DataSourceCode.OWNER_SHIP.getCode();
		handleRequestParam(req);
		resTO = executeQuery(req);
		handleResponseParam(req, resTO);
		// 行内压测挡板处理
//		try {
//			Thread.sleep(250);
//		} catch (InterruptedException e) {
//			e.printStackTrace();
//		}
//		resTO.setAddressCity("浙江");
//		resTO.setAddressProvince("温州");
//		resTO.setResCode("0000");
//		resTO.setResMsg("查询成功");
//		handleResponseParam(req, resTO);
//		// 挡板入库
//		DataCallLogsReqBO dataCallLogsReqBO = new DataCallLogsReqBO();
//		dataCallLogsReqBO.setId(UUID.randomUUID().toString().replace("-", ""));
//		dataCallLogsReqBO.setParams(JSONObject.toJSONString(req));
//		dataCallLogsReqBO.setElapsed(250);
//		dataCallLogsReqBO.setWselapsed(250);
//		dataCallLogsReqBO.setDataType(this.dataType);
//		dataCallLogsReqBO.setResCode("0000");
//		dataCallLogsReqBO.setResMsg("查询成功");
//		dataCallLogsReqBO.setResult("浙江温州");
//		dataCallLogsReqBO.setOrderId(req.getOrderId());
//		dataCallLogsReqBO.setUpdateTime(new Date());
//		dataCallLogsReqBO.setCreateTime(new Date());
//		dataCallLogsService.createDataCallLogs(dataCallLogsReqBO);
		return resTO;
	}
	
	@Override
	protected String createQueryXml(OwnerShipReqTO req) {
		StringBuilder xml = new StringBuilder();
		xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>");
        xml.append("<subatm>");
        xml.append("<application>GwBiz.Req</application>");
        xml.append("<version>1.0.0</version>");
        xml.append("<sendTime>").append(DateUtil.now14()).append("</sendTime>");
        xml.append("<transCode>100075</transCode>");
        xml.append("<channelId>").append(encryInfo.getChannelId()).append("</channelId>");
        xml.append("<channelOrderId>").append(DateUtil.now17()).append("</channelOrderId>");
        xml.append("<phone>").append(req.getPhoneNum()).append("</phone>");
        xml.append("</subatm>");
        req.setQueryXml(xml.toString());
		return xml.toString();
	}
	
	@Override
	protected OwnerShipResTO parseResultAndSave(String resultXml, String orderId, Date createDate) {
		log.info("调用手机号归属地查询接口返回报文：{}", resultXml);
		OwnerShipResTO resTO = new OwnerShipResTO();
		try {
			// 解析xml，保存本地DB
			JSONObject jasonObject = JSONObject.parseObject(resultXml);
			if (null != jasonObject) {

				if ("0000".equals(jasonObject.get("resCode"))) {
					JSONObject resData = (JSONObject) jasonObject.get("resData");
					resTO.setAddressCity(resData.getString("city"));
					resTO.setAddressProvince(resData.getString("province"));

				}
				resTO.setResCode((String)jasonObject.get("resCode"));
				resTO.setResMsg((String)jasonObject.get("resMsg"));
				//resTO.setReqId(dataCallLogsReqBO.getId());
			} else {
				resTO.setResCode("1111");
				resTO.setResMsg("手机号归属地查询接口返回数据异常");
			}
			
		} catch (Exception e) {
			log.info("调用手机号归属地查询接口异常：{}", e);
			resTO.setResCode("1111");
			resTO.setResMsg("调用手机号归属地查询接口异常");
		}
		log.info("调用手机号归属地查询接口返回结果：{}", JSONObject.toJSONString(resTO));
		return resTO;
	}
	
	@SuppressWarnings("unchecked")
	@PostConstruct
	@Override
	public void register() {
		registerToWsServiceFactory(this, OwnerShipReqTO.class);
	}
	
//	public static void main(String[] args) {
//		String aa = "{\"resCode\":\"0000\",\"resMsg\":\"查询成功\",\"resData\":[{\"Date\":\"2017/07/2318:17:42\",\"money\":\"2\",\"platForm\":\"49\"},{\"Date\":\"2017/10/2219:59:01\",\"money\":3,\"platForm\":\"52\"}]}";
//		JSONObject jasonObject = JSONObject.parseObject(aa);
//		System.out.println("==============" + jasonObject);
//		JSONArray jsonArray = (JSONArray) jasonObject.get("resData");
//		System.out.println(jsonArray.size() + "==============" + jsonArray);
//	}

	private void handleRequestParam(OwnerShipReqTO req) {
		if(req.getAttr().equals("联系人手机号")) {
			req.setPhone(req.getContactMobile().replace("****", "6666"));
		} else {
			req.setPhone(req.getPhoneNum());
		}
	}
    private void handleResponseParam(OwnerShipReqTO req, OwnerShipResTO res) {
		res.setPhoneCity(req.getPhoneCity());
		res.setTelProvince(req.getTelProvince());
		res.setTelCity(req.getTelCity());
		res.setRelationPhoneCity(req.getRelationPhoneCity());

        if(req.getAttr().equals("联系人手机号")) {
            res.setRelationPhoneCity(res.getPhoneCity());
        }else{
			res.setPhoneCity(res.getAddressProvince()+ "," + res.getAddressCity());
			res.setTelCity(res.getAddressCity());
			res.setTelProvince(res.getAddressProvince());
		}
    }
}

